unit Contas;

interface
uses Classes;
type
  TAbstractTituloParcela = class
  private
    FFormaPagamento: char;
    FJurosDescontos: Currency;
    FValorRecebido: Currency;
    FValor: Currency;
    FTituloID: integer;
    FParcelaID: integer;
    FParcelaNossoNumero: integer;
    FRecebimento: TDateTime;
    FVencimento: TDateTime;
    FDataBaixa: TDateTime;
    procedure SetDataBaixa(const Value: TDateTime);
    procedure SetFormaPagamento(const Value: char);
    procedure SetJurosDescontos(const Value: Currency);
    procedure SetParcelaID(const Value: integer);
    procedure SetParcelaNossoNumero(const Value: integer);
    procedure SetRecebimento(const Value: TDateTime);
    procedure SetTituloID(const Value: integer);
    procedure SetValor(const Value: Currency);
    procedure SetValorRecebido(const Value: Currency);
    procedure SetVencimento(const Value: TDateTime);
  public
    property ParcelaID : integer read FParcelaID write SetParcelaID;
    property TituloID : integer read FTituloID write SetTituloID;
    property ParcelaNossoNumero : integer read FParcelaNossoNumero write SetParcelaNossoNumero;
    property Vencimento : TDateTime read FVencimento write SetVencimento;
    property Recebimento : TDateTime read FRecebimento write SetRecebimento;
    property DataBaixa : TDateTime read FDataBaixa write SetDataBaixa;
    property FormaPagamento : char read FFormaPagamento write SetFormaPagamento;
    property Valor: Currency read FValor write SetValor;
    property ValorRecebido : Currency read FValorRecebido write SetValorRecebido;
    property JurosDescontos : Currency read FJurosDescontos write SetJurosDescontos;
    function ParcelaPaga : boolean;virtual;abstract;
    function ParcelaAtrasada : boolean; virtual;abstract;
    procedure PagarParcela(ValorRecebido : Currency; DataPagamento : TDateTime);virtual;abstract;
  end;

  TArrayParcelas = array of TAbstractTituloParcela;

  TAbstractTitulo = class
  private
    FValor: Currency;
    FTitular: integer;
    FTituloID: integer;
    FEmpresa: smallint;
    FUsuario: string;
    FConta: string;
    FObservacoes: string;
    FNota: string;
    FPedidoNR: string;
    FTituloNR: string;
    FSubConta: string;
    FTitulos: TArrayParcelas;
    FDataEmissao: TDateTime;
    procedure SetConta(const Value: string);
    procedure SetDataEmissao(const Value: TDateTime);
    procedure SetEmpresa(const Value: smallint);
    procedure SetNota(const Value: string);
    procedure SetObservacoes(const Value: string);
    procedure SetPedidoNR(const Value: string);
    procedure SetSubConta(const Value: string);
    procedure SetTitular(const Value: integer);
    procedure SetTituloID(const Value: integer);
    procedure SetTituloNR(const Value: string);
    procedure SetTitulos(const Value: TArrayParcelas);
    procedure SetUsuario(const Value: string);
    procedure SetValor(const Value: Currency);
  public
    property Titulos        : TArrayParcelas read FTitulos write SetTitulos;
    property TituloID       : integer read FTituloID write SetTituloID;
    property DataEmissao    : TDateTime read FDataEmissao write SetDataEmissao;
    property Empresa        : smallint read FEmpresa write SetEmpresa;
    property Observacoes    : string read FObservacoes write SetObservacoes;
    property Titular        : integer read FTitular write SetTitular;
    property Usuario        : string read FUsuario write SetUsuario;
    property TituloNR       : string read FTituloNR write SetTituloNR;
    property PedidoNR       : string read FPedidoNR write SetPedidoNR;
    property Nota           : string read FNota write SetNota;
    property Conta          : string read FConta write SetConta;
    property SubConta       : string read FSubConta write SetSubConta;
    property Valor          : Currency read FValor write SetValor;
    procedure GerarParcelas;virtual;abstract;
    function TituloQuitado  : boolean;virtual;abstract;
    function TituloPendente : boolean;virtual;abstract;
    procedure Salvar;virtual;abstract;
    procedure Excluir;virtual;abstract;
    procedure SelecionarPorID(ID:integer);virtual;abstract;
  end;

  TTituloPagar = class(TAbstractTitulo)
  public
    procedure GerarParcelas;override;
    procedure Excluir;override;
    procedure Salvar;override;
    procedure SelecionarPorID(ID: Integer);override;
    function TituloPendente: Boolean;override;
    function TituloQuitado: Boolean;override;
  end;

  TTituloReceber = class(TAbstractTitulo)
  private
    FCaixa : integer;
    procedure SetCaixa(const Value: integer);
  public
    property Caixa: integer read FCaixa write SetCaixa;
    procedure Salvar;override;
    procedure Excluir;override;
    procedure GerarParcelas;override;
    procedure SelecionarPorID(ID: Integer);override;
    function TituloPendente: Boolean;override;
    function TituloQuitado: Boolean;override;
  end;

  TTituloParcela = class(TAbstractTituloParcela)
  private
  public
    procedure PagarParcela(ValorRecebido: Currency;
      DataPagamento: TDateTime);override;
    function ParcelaAtrasada: Boolean;override;
    function ParcelaPaga: Boolean;override;
  end;

implementation

{ TAbstractTituloParcela }

procedure TAbstractTituloParcela.SetDataBaixa(const Value: TDateTime);
begin
  FDataBaixa := Value;
end;

procedure TAbstractTituloParcela.SetFormaPagamento(const Value: char);
begin
  FFormaPagamento := Value;
end;

procedure TAbstractTituloParcela.SetJurosDescontos(const Value: Currency);
begin
  FJurosDescontos := Value;
end;

procedure TAbstractTituloParcela.SetParcelaID(const Value: integer);
begin
  FParcelaID := Value;
end;

procedure TAbstractTituloParcela.SetParcelaNossoNumero(
  const Value: integer);
begin
  FParcelaNossoNumero := Value;
end;

procedure TAbstractTituloParcela.SetRecebimento(const Value: TDateTime);
begin
  FRecebimento := Value;
end;

procedure TAbstractTituloParcela.SetTituloID(const Value: integer);
begin
  FTituloID := Value;
end;

procedure TAbstractTituloParcela.SetValor(const Value: Currency);
begin
  FValor := Value;
end;

procedure TAbstractTituloParcela.SetValorRecebido(const Value: Currency);
begin
  FValorRecebido := Value;
end;

procedure TAbstractTituloParcela.SetVencimento(const Value: TDateTime);
begin
  FVencimento := Value;
end;

{ TAbstractTitulo }

procedure TAbstractTitulo.SetConta(const Value: string);
begin
  FConta := Value;
end;

procedure TAbstractTitulo.SetDataEmissao(const Value: TDateTime);
begin
  FDataEmissao := Value;
end;

procedure TAbstractTitulo.SetEmpresa(const Value: smallint);
begin
  FEmpresa := Value;
end;

procedure TAbstractTitulo.SetNota(const Value: string);
begin
  FNota := Value;
end;

procedure TAbstractTitulo.SetObservacoes(const Value: string);
begin
  FObservacoes := Value;
end;

procedure TAbstractTitulo.SetPedidoNR(const Value: string);
begin
  FPedidoNR := Value;
end;

procedure TAbstractTitulo.SetSubConta(const Value: string);
begin
  FSubConta := Value;
end;

procedure TAbstractTitulo.SetTitular(const Value: integer);
begin
  FTitular := Value;
end;

procedure TAbstractTitulo.SetTituloID(const Value: integer);
begin
  FTituloID := Value;
end;

procedure TAbstractTitulo.SetTituloNR(const Value: string);
begin
  FTituloNR := Value;
end;

procedure TAbstractTitulo.SetTitulos(const Value: TArrayParcelas);
begin
  FTitulos := Value;
end;

procedure TAbstractTitulo.SetUsuario(const Value: string);
begin
  FUsuario := Value;
end;

procedure TAbstractTitulo.SetValor(const Value: Currency);
begin
  FValor := Value;
end;

{ TTituloReceber }

procedure TTituloReceber.Excluir;
begin
  inherited;

end;

procedure TTituloReceber.GerarParcelas;
begin
  inherited;

end;

procedure TTituloReceber.Salvar;
begin
  inherited;

end;

procedure TTituloReceber.SelecionarPorID(ID: Integer);
begin
  inherited;

end;

procedure TTituloReceber.SetCaixa(const Value: integer);
begin
  Caixa := Value;
end;

function TTituloReceber.TituloPendente: Boolean;
begin

end;

function TTituloReceber.TituloQuitado: Boolean;
begin

end;

{ TTituloPagar }

procedure TTituloPagar.Excluir;
begin
  inherited;

end;

procedure TTituloPagar.GerarParcelas;
begin
  inherited;

end;

procedure TTituloPagar.Salvar;
begin
  inherited;

end;

procedure TTituloPagar.SelecionarPorID(ID: Integer);
begin
  inherited;

end;

function TTituloPagar.TituloPendente: Boolean;
begin

end;

function TTituloPagar.TituloQuitado: Boolean;
begin

end;

{ TTituloParcela }

procedure TTituloParcela.PagarParcela(ValorRecebido: Currency;
  DataPagamento: TDateTime);
begin
  inherited;

end;

function TTituloParcela.ParcelaAtrasada: Boolean;
begin

end;

function TTituloParcela.ParcelaPaga: Boolean;
begin

end;

end.
